前面讲过Job的提交过程,但没有涉及到Job的生成和更多的调度细节,接着上源码。
Job的生成
前面已经讲到过graph.generateJobs(time)来生成Job,追踪源码
这里其实outputStreams其实是一个ArrayBufferDStream[_]实例,也就是一个DStream对象吧,调用了generateJob,继续看这个
|
|
可以看到,最终还是调用了Spark核心方法,看看这个runJob
|
|
这里可以看到是dagScheduler来runJob,继续看这个
|
|
下面自然要看看这个submitJob了
|
|
跟踪eventProcessActor处理JobSubmitted的方法
小结
可以看到,Streaming的本质也就是将Spark的一些基本RDD操作封装,其主要的调度工作还是由Spark核心调度器来完成。以上是关于Streaming的Job如何生成,生成Job之后将会划分Stage,生成task并最终调度到各个节点上运行,关于Streaming暂时分析到这里,日后补充Spark核心调度。